home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Graphics / Plotting / GnuTerm_1.1a / Source / NeXT / GnuView.m < prev    next >
Encoding:
Text File  |  1995-07-19  |  1.8 KB  |  121 lines

  1. #import "GnuView.h"
  2.  
  3.  
  4. @implementation GnuView
  5.  
  6. static NXCoord xsize= NEXT_XMAX/10+50;
  7. static NXCoord ysize= NEXT_YMAX/10+50;
  8.  
  9. static int printing;
  10. static void setprintsize();
  11.  
  12. char empty[]="";
  13.  
  14. - initFrame: (NXRect *)rects
  15. {
  16.     [super initFrame:rects];
  17.         
  18.     PSstring = empty;
  19.     [self display];
  20.  
  21.     return self;
  22. }
  23.  
  24.  
  25.     /* This is here to fix NeXT bug # 21973:  failure to free D.O. memory */
  26.     /* Note:  personally I don't think this fixes it. */
  27. - free
  28. {
  29.     free(PSstring);
  30.     [super free];
  31.     
  32.     return self;
  33.  
  34. }
  35.  
  36. - executePS:(char *) PStext
  37. {
  38.     
  39.     PSstring = PStext;
  40.  
  41.     [window makeKeyAndOrderFront:self];
  42.     [self display];
  43.  
  44.     return self;
  45. }
  46.  
  47.  
  48. - drawSelf:(const NXRect *) rects : (int) rectCount
  49. {
  50.     DPSContext d;
  51.     
  52.     d = DPSGetCurrentContext();
  53.  
  54.     if (!printing) {
  55.                             /* Clear Screen */ 
  56.         PSsetgray(NX_WHITE);
  57.         NXRectFill(&bounds);
  58.                             /* scale to gnuplot coords */
  59.         [self setDrawSize:xsize:ysize];    
  60.     }
  61.     else {
  62.         setprintsize();
  63.     }
  64.  
  65.     DPSWritePostScript(d, PSstring, strlen(PSstring));
  66.  
  67.     DPSFlushContext(d);
  68.  
  69.     return self;
  70. }
  71.  
  72.  
  73. - printPSCode: sender
  74. {
  75.     printing = 1;
  76.     [super printPSCode:sender];
  77.     printing = 0;
  78.     
  79.     return self;
  80. }
  81.  
  82. static void setprintsize()
  83. {
  84.     DPSContext d;
  85.     NXRect *paperRect;
  86.     float width, height;
  87.     id prInfo;
  88.  
  89.     d = DPSGetCurrentContext();
  90.     prInfo = [NXApp printInfo];
  91.     paperRect = (NXRect *) [prInfo paperRect];
  92.     
  93.     width = paperRect->size.width;
  94.     height = paperRect->size.height;
  95.  
  96.     DPSPrintf(d, "grestore\ngrestore\ngrestore\n");
  97.     
  98.     if ([prInfo orientation] == NX_LANDSCAPE) {        
  99.         DPSPrintf(d, "-90 rotate\n");
  100.         DPSPrintf(d, "%g 0 translate\n", -1.0 * paperRect->size.width);
  101.         DPSPrintf(d, "0 %g translate\n", paperRect->size.height/20);
  102.     }
  103.     else 
  104.     {                    
  105.         DPSPrintf(d, "%g %g scale\n", width/height, height/width);    
  106.     }
  107.         
  108.     DPSPrintf(d, "gsave\ngsave\n");
  109.  
  110.     DPSFlushContext(d);
  111.  
  112.     return;
  113. }
  114.  
  115.  
  116.  
  117.  
  118. @end
  119.  
  120.  
  121.